/**
 * Copyright 厦门中软海晟信息技术有限公司 版权所有 违者必究 2019
 */
package com.vijos;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * @author : sunzb(sunzb@hsit.com.cn)
 * @date: 2019/4/19
 */
//佳佳的魔法照片
//    一共有n个人
//    给其中的k个人
//    关系好坏的程度W[i], i = 1~n
//    W排序 => 序号D[i]
//    序号D[i]对10取模的值将这些人分为10类
//    类别序号C[i]的值为D->(i-1) mod 10 +1
//    第C[i]类的人将会额外得到E[i]的权值
//    求出加上额外权值以后，最终的权值最大的k个人,并输出他们的编号
//    输入格式
//    第一行输出用空格隔开的两个整数，分别是n和k。
//    第二行给出了10个正整数，分别是E[1]到E[10]。
//    第三行给出了n个正整数，第i个数表示编号为i的人的权值W[i]。
public class P6_1_1282 {

    public static int[] test(int k, int[] es, int[] ws) {
        dataVerify(k, es, ws);
        Person[] persons = new Person[es.length];
        for (int i = 0; i < ws.length; i++) {
            persons[i] = new Person().setIndex(i).setW(ws[i]);
        }
        Arrays.sort(persons, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                if (p1.getW() > p2.getW()) {
                    return -1;
                } else if (p1.getW() == p2.getW()) {
                    return 0;
                } else {
                    return 1;
                }
            }
        });
        for (int i = 0; i < persons.length; i++) {
            persons[i].setdIndex(i).setcIndex(i % 10).setE(es[i % 10]);
        }
        Arrays.sort(persons, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                int p1Val = p1.getW() + p1.getE();
                int p2Val = p2.getW() + p2.getE();
                if (p1Val > p2Val) {
                    return -1;
                } else if (p1Val == p2Val) {
                    return 0;
                } else {
                    return 1;
                }
            }
        });
        int[] result = new int[k];
        for (int i = 0; i < k; i++) {
            result[i] = persons[i].index + 1;
        }
        return result;
    }

    private static void dataVerify(int k, int[] es, int[] ws) {
        if (es.length != 10) {
            throw new RuntimeException("es必须是10类");
        }
    }

    static class Person {
        int index;
        int w;
        int dIndex;
        int cIndex;
        int e;

        public int getIndex() {
            return index;
        }

        public Person setIndex(int index) {
            this.index = index;
            return this;
        }

        public int getW() {
            return w;
        }

        public Person setW(int w) {
            this.w = w;
            return this;
        }

        public int getdIndex() {
            return dIndex;
        }

        public Person setdIndex(int dIndex) {
            this.dIndex = dIndex;
            return this;
        }

        public int getcIndex() {
            return cIndex;
        }

        public Person setcIndex(int cIndex) {
            this.cIndex = cIndex;
            return this;
        }

        public int getE() {
            return e;
        }

        public Person setE(int e) {
            this.e = e;
            return this;
        }
    }

    public static void printArray(int[] values) {
        StringBuilder sb = new StringBuilder().append('[');
        for (int i = 0; i < values.length; i++) {
            if (i != values.length - 1) {
                sb.append(values[i]).append(", ");
            } else {
                sb.append(values[i]);
            }
        }
        sb.append(']');
        System.out.println(sb.toString());
    }

    public static void main(String[] args) {
        printArray(test(10, new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
                new int[] {2, 4, 6, 8, 50, 10, 14, 16, 18, 20,}));
    }
}
